Emily Beckman Bruns, Colin Khoury, Ray Mims, Abby Meyer,
Emily Warschefsky






Test Tables
By hand
| A |
20 |
0.65 |
| B |
20 |
0.95 |
| C |
20 |
0.15 |
LS0tCnRpdGxlOiAiU3VtbWFyeSBvZiBjb25zZXJ2YXRpb24gZ2FwIGFuYWx5c2lzIgphdXRob3I6ICJOb3J0aCBBbWVyaWNhbiBGcnVpdCBhbmQgTnV0IFRyZWUgQ3JvcCBXaWxkIFJlbGF0aXZlcyBXb3JraW5nIEdyb3VwIgpkYXRlOiAiSmFudWFyeSAyMDIzIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIGRmX3ByaW50OiBwYWdlZAogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKLS0tCgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoubWFpbi1jb250YWluZXIgewogIG1heC13aWR0aDogMTgwMHB4ICFpbXBvcnRhbnQ7CiAgbWFyZ2luLWxlZnQ6IDA7CiAgbWFyZ2luLXJpZ2h0OiBhdXRvOwp9Cjwvc3R5bGU+CgoqKkVtaWx5IEJlY2ttYW4gQnJ1bnMsIENvbGluIEtob3VyeSwgUmF5IE1pbXMsIEFiYnkgTWV5ZXIsIEVtaWx5IFdhcnNjaGVmc2t5KioKCmBgYHtyIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQgPSAwLjUsIGZpZy5hbGlnbiA9ICJsZWZ0In0KIyMgYWRkIHBhcnRuZXIgbG9nb3MKIyBVbml0ZWQgU3RhdGVzIEJvdGFuaWMgR2FyZGVuCmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCIvVm9sdW1lcy9Hb29nbGVEcml2ZS0xMDM3Mjk0MjkzMDczMDI1MDg0MzMvU2hhcmVkIGRyaXZlcy9HbG9iYWwgVHJlZSBDb25zZXJ2YXRpb24gUHJvZ3JhbS80LiBHVENQX1Byb2plY3RzL0dhcCBBbmFseXNlcy9Db25zZXJ2YXRpb24gR2FwIEFuYWx5c2lzIC0gRlJVSVQgJiBOVVQgVFJFRSBDV1IgTk9SVEggQU1FUklDQS9HYXAtQW5hbHlzaXMtTWFwcGluZy9wYXJudGVyX2xvZ29zL1VTQkdfTE9HT1NfTUVESVVNLUdSRUVOLTA4LnBuZyIpCiMgU2FuIERpZWdvIEJvdGFuaWMgR2FyZGVuCmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCIvVm9sdW1lcy9Hb29nbGVEcml2ZS0xMDM3Mjk0MjkzMDczMDI1MDg0MzMvU2hhcmVkIGRyaXZlcy9HbG9iYWwgVHJlZSBDb25zZXJ2YXRpb24gUHJvZ3JhbS80LiBHVENQX1Byb2plY3RzL0dhcCBBbmFseXNlcy9Db25zZXJ2YXRpb24gR2FwIEFuYWx5c2lzIC0gRlJVSVQgJiBOVVQgVFJFRSBDV1IgTk9SVEggQU1FUklDQS9HYXAtQW5hbHlzaXMtTWFwcGluZy9wYXJudGVyX2xvZ29zL1NhbkRpZWdvQm90YW5pY0dhcmRlbi1sb2dvLnBuZyIpCiMgVGhlIE1vcnRvbiBBcmJvcmV0dW0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoIi9Wb2x1bWVzL0dvb2dsZURyaXZlLTEwMzcyOTQyOTMwNzMwMjUwODQzMy9TaGFyZWQgZHJpdmVzL0dsb2JhbCBUcmVlIENvbnNlcnZhdGlvbiBQcm9ncmFtLzQuIEdUQ1BfUHJvamVjdHMvR2FwIEFuYWx5c2VzL0NvbnNlcnZhdGlvbiBHYXAgQW5hbHlzaXMgLSBGUlVJVCAmIE5VVCBUUkVFIENXUiBOT1JUSCBBTUVSSUNBL0dhcC1BbmFseXNpcy1NYXBwaW5nL3Bhcm50ZXJfbG9nb3MvMjFNUktfVGhlTW9ydG9uQXJib3JldHVtX1RDT1RMb2dvX0JsYWNrX0JsYWNrLnBuZyIpCiMgQm90YW5pYyBHYXJkZW5zIENvbnNlcnZhdGlvbiBJbnRlcm5hdGlvbmFsCmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCIvVm9sdW1lcy9Hb29nbGVEcml2ZS0xMDM3Mjk0MjkzMDczMDI1MDg0MzMvU2hhcmVkIGRyaXZlcy9HbG9iYWwgVHJlZSBDb25zZXJ2YXRpb24gUHJvZ3JhbS80LiBHVENQX1Byb2plY3RzL0dhcCBBbmFseXNlcy9Db25zZXJ2YXRpb24gR2FwIEFuYWx5c2lzIC0gRlJVSVQgJiBOVVQgVFJFRSBDV1IgTk9SVEggQU1FUklDQS9HYXAtQW5hbHlzaXMtTWFwcGluZy9wYXJudGVyX2xvZ29zL0JHQ0lfTG9nb18yLnBuZyIpCiMgTWlzc291cmkgQm90YW5pY2FsIEdhcmRlbgprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiL1ZvbHVtZXMvR29vZ2xlRHJpdmUtMTAzNzI5NDI5MzA3MzAyNTA4NDMzL1NoYXJlZCBkcml2ZXMvR2xvYmFsIFRyZWUgQ29uc2VydmF0aW9uIFByb2dyYW0vNC4gR1RDUF9Qcm9qZWN0cy9HYXAgQW5hbHlzZXMvQ29uc2VydmF0aW9uIEdhcCBBbmFseXNpcyAtIEZSVUlUICYgTlVUIFRSRUUgQ1dSIE5PUlRIIEFNRVJJQ0EvR2FwLUFuYWx5c2lzLU1hcHBpbmcvcGFybnRlcl9sb2dvcy9NT0JPVC1sb2dvLTEucG5nIikKIyBOYXRpb25hbCBTY2llbmNlIEZvdW5kYXRpb24Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoIi9Wb2x1bWVzL0dvb2dsZURyaXZlLTEwMzcyOTQyOTMwNzMwMjUwODQzMy9TaGFyZWQgZHJpdmVzL0dsb2JhbCBUcmVlIENvbnNlcnZhdGlvbiBQcm9ncmFtLzQuIEdUQ1BfUHJvamVjdHMvR2FwIEFuYWx5c2VzL0NvbnNlcnZhdGlvbiBHYXAgQW5hbHlzaXMgLSBGUlVJVCAmIE5VVCBUUkVFIENXUiBOT1JUSCBBTUVSSUNBL0dhcC1BbmFseXNpcy1NYXBwaW5nL3Bhcm50ZXJfbG9nb3MvTlNGX09mZmljaWFsX2xvZ29fSGlnaF9SZXNfMTIwMHBwaS5wbmciKQpgYGAKCmBgYHtyIGVjaG89RkFMU0UsIGluY2x1ZGU9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiMjIG5vdGUgdGhhdCAiZWNobz1GQUxTRSIgbWVhbnMgdGhlIGNvZGUgd2lsbCBub3QKc3Nzc2hvdyB1cCBpbiB0aGUgSFRNTCBvdXRwdXQ7ICJpbmNsdWRlPUZBTFNFIiBtZWFucyB0aGUgb3V0cHV0IG9iamVjdCBpcyBub3QgaW4gdGhlIEhUTE0KCiMjIHNvdXJjZSB0aGUgc2NyaXB0IHdpdGggbGVhZmxldCBtYXBwaW5nIGZ1bmN0aW9ucwpzb3VyY2UoIi9Vc2Vycy9lbWlseS9Eb2N1bWVudHMvR2l0SHViL1NEQkdfQ1dSLXRyZWVzLWdhcC1hbmFseXNpcy9tYXBwaW5nX2Z1bmN0aW9ucy5SIikKYGBgCgpgYGB7ciBlY2hvPUZBTFNFLCBpbmNsdWRlPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojIyB1c2UgbGVhZmxldCBwYWNrYWdlIHRvIGNyZWF0ZSBpbnRlcmFjdGl2ZSBtYXBzIHRvIGV4cGxvcmUgKGh0bWwpCgojIGRlZmluZSBwcm9qZWN0aW9ucyB3ZSdsbCB1c2UgdGhyb3VnaG91dAojCQlwb2ludHMgd2lsbCBiZSBXR1M4NAojcHQucHJvaiA8LSAiK3Byb2o9bG9uZ2xhdCArZGF0dW09V0dTODQiCnB0LnByb2ogPC0gIkVQU0c6NDMyNiIKIyAgIGZvciBjYWxjdWxhdGlvbnMgd2UgbmVlZCBzb21ldGhpbmcgaW4gbWV0ZXJzLCBsaWtlIEVxdWFsIEVhcnRoIFByb2plY3Rpb24KIyBjYWxjLnByb2ogPC0gIitwcm9qPWVxZWFydGggK2xvbl8wPTAgK3hfMD0wICt5XzA9MCArZWxscHM9V0dTODQgK2RhdHVtPVdHUzg0ICt1bml0cz1tICtub19kZWZzIgpjYWxjLnByb2ogPC0gIitwcm9qPWFlYSArIGxhdF8xPTI5LjUgKyBsYXRfMj00NS41ICsgbGF0XzA9MzcuNSArIGxvbl8wPS05NiAreF8wPTAgK3lfMD0wICsgZWxscHMgPUdSUzgwICtkYXR1bT1OQUQ4MyArIHVuaXRzPW0gK25vX2RlZnMiCgojIHJlYWQgaW4gLyBsb2FkIHBvbHlnb24gZGF0YQogICMgZWNvcmVnaW9ucwojZWNvcmVnaW9ucyA8LSB2ZWN0KGZpbGUucGF0aChtYWluX2RpcixnaXNfZGlyLCJ0ZXJyLWVjb3JlZ2lvbnMtVE5DIiwgInRuY190ZXJyX2Vjb3JlZ2lvbnMuc2hwIikpCiAgIyBjb3VudHJ5IGJvdW5kYXJpZXMKd29ybGRfY291bnRyaWVzIDwtIHZlY3QoZmlsZS5wYXRoKG1haW5fZGlyLGdpc19kaXIsICJVSUFfV29ybGRfQ291bnRyaWVzX0JvdW5kYXJpZXMvV29ybGRfQ291bnRyaWVzX19HZW5lcmFsaXplZF8uc2hwIikpCiAgIyBjcmVhdGUgc3Vic2V0IHdpdGggb25seSB0YXJnZXQgY291bnRyaWVzCiN0YXJnZXRfaXNvIDwtIGMoIlVTIiwiTVgiLCJDQSIpCiN0YXJnZXRfY291bnRyaWVzX3NocCA8LSBzdWJzZXQod29ybGRfY291bnRyaWVzLAojICB3b3JsZF9jb3VudHJpZXMkSVNPICVpbiUgdGFyZ2V0X2lzbywpCnRhcmdldF9jb3VudHJpZXNfc2hwIDwtIHdvcmxkX2NvdW50cmllcwogICMgY3JlYXRlIHBvbHlnb24gZm9yIGNsaXBwaW5nIHBvaW50cyBsYXRlciAocHJvamVjdCB0byBwdCBwcm9qZWN0aW9uKQojdGFyZ2V0X2NvdW50cmllcy5wdCA8LSBwcm9qZWN0KHRhcmdldF9jb3VudHJpZXNfc2hwLHB0LnByb2opCiNib3VuZGFyeS5wdCA8LSBhZ2dyZWdhdGUodGFyZ2V0X2NvdW50cmllcy5wdCxkaXNzb2x2ZSA9IFRSVUUpCiAgIyBjcmVhdGUgcG9seWdvbiBmb3IgY2xpcHBpbmcgYnVmZmVycyBsYXRlcgplY29yZWdpb25zX3Byb2ogPC0gcHJvamVjdChlY29yZWdpb25zLHB0LnByb2opCmJvdW5kYXJ5LnBvbHkgPC0gYWdncmVnYXRlKGVjb3JlZ2lvbnNfcHJvaixkaXNzb2x2ZSA9IFRSVUUpCiAgIyBjcmVhdGUgY2xpcHBlZCB2ZXJzaW9uIG9mIGVjb3JlZ2lvbnMKZWNvX2NsaXAgPC0gY3JvcChlY29yZWdpb25zX3Byb2osdGFyZ2V0X2NvdW50cmllc19zaHApCmVjb19jbGlwX3NmIDwtIHNmOjpzdF9hc19zZihlY29fY2xpcCkKCiMgc2VsZWN0IHRhcmdldCB0YXhhCiN0YXhvbl9saXN0IDwtIHJlYWQuY3N2KGZpbGUucGF0aChtYWluX2Rpcix0YXhhX2RpciwidGFyZ2V0X3RheGFfd2l0aF9zeW5vbnltcy5jc3YiKSwgaGVhZGVyID0gVCwgbmEuc3RyaW5ncz1jKCIiLCJOQSIpLCBjb2xDbGFzc2VzPSJjaGFyYWN0ZXIiKQogICMgYWRkIGNvdW50cnkgZGlzdHJpYnV0aW9uIGRhdGEKI3RheG9uX2Rpc3QgPC0gcmVhZC5jc3YoZmlsZS5wYXRoKG1haW5fZGlyLHRheGFfZGlyLCAidGFyZ2V0X3RheGFfd2l0aF9uYXRpdmVfZGlzdC5jc3YiKSwgaGVhZGVyID0gVCwgbmEuc3RyaW5ncz1jKCIiLCJOQSIpLCBjb2xDbGFzc2VzPSJjaGFyYWN0ZXIiKQojdGF4b25fbGlzdCA8LSBsZWZ0X2pvaW4odGF4b25fbGlzdCx0YXhvbl9kaXN0KQojdGFyZ2V0X3RheGEgPC0gdGF4b25fbGlzdCAlPiUgZHBseXI6OmZpbHRlcih0YXhvbl9uYW1lX3N0YXR1cyA9PSAiQWNjZXB0ZWQiKQogICMgbGlzdCBvZiBuYXRpdmUgY291bnRyaWVzIGZvciBlYWNoIHRhcmdldCBzcGVjaWVzCiNjb3VudHJpZXMgPC0gdGFyZ2V0X3RheGEkYWxsX25hdGl2ZV9kaXN0X2lzbzIKCiAgIyBjcmVhdGUgc3Vic2V0cyBvZiB0YXhhIHRoYXQgaGF2ZSBkYXRhCiNzcHAuYWxsIDwtIGxpc3QuZmlsZXMocGF0aCA9IHBhdGgucHRzLCBwYXR0ZXJuID0gIi5jc3YiLCBmdWxsLm5hbWVzID0gRikKIyAgc3BwLmFsbCA8LSB1bmlxdWUoZ3N1YigiLmNzdiIsIiIsc3BwLmFsbCkpCiN5ZXNfc2RtIDwtIGxpc3QuZmlsZXMocGF0aCA9IHBhdGguc2RtLCBwYXR0ZXJuID0gIi50aWYiLCBmdWxsLm5hbWVzID0gRikKIyAgeWVzX3NkbSA8LSB1bmlxdWUoZ3N1YigiX1BOQVNfMjAyMF9TRE0udGlmIiwiIix5ZXNfc2RtKSkKCiMjCiMjIyBjeWNsZSB0aHJvdWdoIGVhY2ggc3BlY2llcyBmaWxlIGFuZCBjcmVhdGUgbWFwCiMjCiNmb3IoaSBpbiAxOmxlbmd0aChzcHAuYWxsKSl7CiNpIDwtIDEKCiMgIGNhdCgic3RhcnRpbmcgIixzcHAuYWxsW2ldLCIsICIsaSwiIG9mICIsbGVuZ3RoKHNwcC5hbGwpLCIuXG4iLCBzZXA9IiIpCiAgCiAgIyMgcmVhZCBpbiBvY2N1cnJlbmNlIHJlY29yZHMgKGluY2x1ZGVzIGV4IHNpdHUpCiAgc3BwLnB0cyA8LSByZWFkLmNzdihmaWxlLnBhdGgocGF0aC5wdHMsIHBhc3RlMChzcHAuYWxsW2ldLCAiLmNzdiIpKSkKCiAgIyMgZmlsdGVyIHJlY29yZHMgYmFzZWQgb24gZmxhZ2dpbmcgY29sdW1ucyBmcm9tIDUtcmVmaW5lX29jY3VycmVuY2VfZGF0YS5SCiAgc3BwLnB0cyA8LSBzcHAucHRzICU+JQogICAgbXV0YXRlKAogICAgICAuY2VuID0gYXMubG9naWNhbCguY2VuKSwKICAgICAgIy51cmIgPSBhcy5sb2dpY2FsKC51cmIpLAogICAgICAuaW5zdCA9IGFzLmxvZ2ljYWwoLmluc3QpLAogICAgICAjLmNvbiA9IGFzLmxvZ2ljYWwoLmNvbiksCiAgICAgIC5vdXRsID0gYXMubG9naWNhbCgub3V0bCksCiAgICAgICMuZ3RzbmF0aXZlID0gYXMubG9naWNhbCguZ3RzbmF0aXZlKSwKICAgICAgIy5ybG5hdGl2ZSA9IGFzLmxvZ2ljYWwoLnJsbmF0aXZlKSwKICAgICAgLnlyMTk1MCA9IGFzLmxvZ2ljYWwoLnlyMTk1MCksCiAgICAgIC55cjE5ODAgPSBhcy5sb2dpY2FsKC55cjE5ODApLAogICAgICAueXJuYSA9IGFzLmxvZ2ljYWwoLnlybmEpCiAgICApICU+JQogICAgIyBzZWxlY3Qgb3IgZGVzZWxlY3QgdGhlc2UgZmlsdGVycyBhcyBkZXNpcmVkOgogICAgZHBseXI6OmZpbHRlcigKICAgICAgZGF0YWJhc2UgPT0gIkV4X3NpdHUiIHwKICAgICAgKC5jZW4gJiAuaW5zdCAmIC5vdXRsICYKICAgICAgICAgIy5jb24gJiAKICAgICAgICAgIy51cmIgJiAueXIxOTUwICYgLnlyMTk4MCAmIC55cm5hICYKICAgICAgICAgIyguZ3RzbmF0aXZlIHwgaXMubmEoLmd0c25hdGl2ZSkpICYKICAgICAgICAgIygucmxuYXRpdmUgIHwgaXMubmEoLnJsbmF0aXZlKSkgJgogICAgICAgICAjKC5ybGludHJvZHVjZWQgfCBpcy5uYSgucmxpbnRyb2R1Y2VkKSkgJgogICAgICAgICBiYXNpc09mUmVjb3JkICE9ICJGT1NTSUxfU1BFQ0lNRU4iICYgCiAgICAgICAgIGJhc2lzT2ZSZWNvcmQgIT0gIkxJVklOR19TUEVDSU1FTiIgJgogICAgICAgICBlc3RhYmxpc2htZW50TWVhbnMgIT0gIklOVFJPRFVDRUQiICYgCiAgICAgICAgIGVzdGFibGlzaG1lbnRNZWFucyAhPSAiTUFOQUdFRCIgJgogICAgICAgICBlc3RhYmxpc2htZW50TWVhbnMgIT0gIkNVTFRJVkFURUQiICMmCiAgICAgICAgICNsYXRsb25nX2NvdW50cnlDb2RlICVpbiUgYygiVVMiLCJDQSIsIk1YIikKICAgICAgICkpCgogICMjIGNyZWF0ZSBsYXllciBvZiBidWZmZXJzIGFyb3VuZCBwb2ludHMKICBzcHAucHRzLmJ1ZmZlciA8LSBjcmVhdGUuYnVmZmVycyhzcHAucHRzLDUwMDAwLHB0LnByb2oscHQucHJvaixib3VuZGFyeS5wb2x5KQoKICAjIyBjcmVhdGUgc3Vic2V0IG9mIGVjb3JlZ2lvbnMgd2l0aGluIGJ1ZmZlcnMgKHRha2VzIHRvbyBsb25nKQogICNlY28uc2VsIDwtIGludGVyc2VjdChzcHAucHRzLmJ1ZmZlcixlY29fY2xpcF9zZikKICAjICAjIGNyZWF0ZSBlY29yZWdpb24gY29sb3IgcGFsZXR0ZQogICMgIGVjby5wYWwgPC0gY29sb3JGYWN0b3IocGFsZXR0ZSA9ICJHcmV5cyIsIGRvbWFpbiA9IGVjby5zZWwkRUNPX0lELAogICMgIAlyZXZlcnNlID0gRiwgbmEuY29sb3IgPSAid2hpdGUiKQoKICAjIyBzdWJzZXQgd2l0aCBqdXN0IGV4IHNpdHUgcG9pbnRzCiAgZXgucHRzIDwtIHNwcC5wdHMgJT4lIGRwbHlyOjpmaWx0ZXIoZGF0YWJhc2UgPT0gIkV4X3NpdHUiKQogICMgaWYgdGhlcmUgYXJlIGV4IHNpdHUgcG9pbnRzCiAgaWYobnJvdyhleC5wdHMpPjApewogICAgIyMgY3JlYXRlIGxheWVyIG9mIGJ1ZmZlcnMgYXJvdW5kIGV4IHNpdHUgcG9pbnRzCiAgICBleC5wdHMuYnVmZmVyIDwtIGNyZWF0ZS5idWZmZXJzKGV4LnB0cyw1MDAwMCxwdC5wcm9qLHB0LnByb2osYm91bmRhcnkucG9seSkKICAgICAgICAjIHNwbGl0IGV4IHNpdHUgZGF0YSBieSBudW1iZXIgb2YgaW5kaXZpZHVhbHMsIHRvIHVzZSBkaWZmZXJlbnQgc3ltYm9scwogICAgICAgICNleHNpdHUxIDwtIGV4c2l0dSAlPiUgYXJyYW5nZShlc3RhYmxpc2htZW50TWVhbnMpICU+JQogICAgICAgICMgIGZpbHRlcihlc3RhYmxpc2htZW50TWVhbnMgPD0gZmV3X2luZGl2KQogICAgICAgICNleHNpdHUyIDwtIGV4c2l0dSAlPiUgYXJyYW5nZShlc3RhYmxpc2htZW50TWVhbnMpICU+JQogICAgICAgICMgIGZpbHRlcihlc3RhYmxpc2htZW50TWVhbnMgPiBmZXdfaW5kaXYgJiBlc3RhYmxpc2htZW50TWVhbnMgPCBtYW55X2luZGl2KQogICAgICAgICNleHNpdHUzIDwtIGV4c2l0dSAlPiUgYXJyYW5nZShlc3RhYmxpc2htZW50TWVhbnMpICU+JQogICAgICAgICMgIGZpbHRlcihlc3RhYmxpc2htZW50TWVhbnMgPj0gZmV3X2luZGl2KQogICAgIyBpZiB0aGVyZSBpcyBhIDIwMjAgU0RNCiAgICBpZihzcHAuYWxsW2ldICVpbiUgeWVzX3NkbSl7CiAgICAgICMjIHJlYWQgaW4gcmFzdGVyIGZyb20gS2hvdXJ5IGV0IGFsIDIwMjAgKFBOQVMpCiAgICAgIHNwcC5yYXN0ZXIgPC0gcmFzdGVyKGZpbGUucGF0aChwYXRoLnNkbSxwYXN0ZTAoc3BwLmFsbFtpXSwiX1BOQVNfMjAyMF9TRE0udGlmIikpKQogICAgICAjIHNlbGVjdCBjb2xvciBmb3IgcmFzdGVyIHdoZW4gbWFwcGVkCiAgICAgIHJhc3Rlci5wYWwgPC0gY29sb3JOdW1lcmljKCIjMGU2MTg3Iix2YWx1ZXMoc3BwLnJhc3RlciksbmEuY29sb3IgPSAidHJhbnNwYXJlbnQiKQogICAgICAjIyBtYXAgZXZlcnl0aGluZwogICAgICBwcmludCgibWFwcGluZyBldmVyeXRoaW5nIikKICAgICAgbWFwIDwtIGNyZWF0ZS5mdWxsLm1hcChlY29fY2xpcF9zZixzcHAucmFzdGVyLHJhc3Rlci5wYWwsc3BwLnB0cy5idWZmZXIsc3BwLnB0cyxleC5wdHMuYnVmZmVyLGV4LnB0cykKICAgIH0gZWxzZSB7ICMgbm8gc2RtCiAgICAgICMjIG1hcCB3aXRob3V0IHNkbQogICAgICBwcmludCgibWFwcGluZyB3aXRob3V0IFNETSIpCiAgICAgIG1hcCA8LSBjcmVhdGUubm9zZG0ubWFwKGVjb19jbGlwX3NmLHNwcC5wdHMuYnVmZmVyLHNwcC5wdHMsZXgucHRzLmJ1ZmZlcixleC5wdHMpCiAgICB9CiAgfSBlbHNlIHsgIyBubyBleCBzaXR1CiAgICBpZihzcHAuYWxsW2ldICVpbiUgeWVzX3NkbSl7CiAgICAgICMjIHJlYWQgaW4gcmFzdGVyIGZyb20gS2hvdXJ5IGV0IGFsIDIwMjAgKFBOQVMpCiAgICAgIHNwcC5yYXN0ZXIgPC0gcmFzdGVyKGZpbGUucGF0aChwYXRoLnNkbSxwYXN0ZTAoc3BwLmFsbFtpXSwiX1BOQVNfMjAyMF9TRE0udGlmIikpKQogICAgICAjIHNlbGVjdCBjb2xvciBmb3IgcmFzdGVyIHdoZW4gbWFwcGVkCiAgICAgIHJhc3Rlci5wYWwgPC0gY29sb3JOdW1lcmljKCIjMGU2MTg3Iix2YWx1ZXMoc3BwLnJhc3RlciksbmEuY29sb3IgPSAidHJhbnNwYXJlbnQiKQogICAgICAjIyBtYXAgd2l0aG91dCBleCBzaXR1CiAgICAgIHByaW50KCJtYXBwaW5nIHdpdGhvdXQgZXggc2l0dSIpCiAgICAgIG1hcCA8LSBjcmVhdGUubm9leC5tYXAoZWNvX2NsaXBfc2Ysc3BwLnJhc3RlcixyYXN0ZXIucGFsLHNwcC5wdHMuYnVmZmVyLHNwcC5wdHMpCiAgICB9IGVsc2UgeyAjIG5vIGV4IHNpdHUgYW5kIG5vIHNkbQogICAgICAjIyBtYXAgd2l0aG91dCBleCBzaXR1IG9yIHNkbQogICAgICBwcmludCgibWFwcGluZyB3aXRob3V0IFNETSAmIGV4IHNpdHUiKQogICAgICBtYXAgPC0gY3JlYXRlLm5vZXgubm9zZG0ubWFwKGVjb19jbGlwX3NmLHNwcC5wdHMuYnVmZmVyLHNwcC5wdHMpCiAgICB9CiAgfQoKICAjIHNhdmUgbWFwCiAgI2h0bWx3aWRnZXRzOjpzYXZlV2lkZ2V0KG1hcCwgZmlsZS5wYXRoKHBhdGgub3V0LmZpZ3MsCiAgIyAgcGFzdGUwKHNwcC5hbGxbaV0sICJfX3ByZWxpbV9tYXBfdjIuaHRtbCIpKSkKCiN9CmBgYAoKPGJyPgoKIyMjIFRlc3QgTWFwCgoKYGBge3IgIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGZpZy5jYXA9IkEgbmljZSBpbWFnZS4iLCBmaWcuaGVpZ2h0PTd9CiAgI291dC53aWR0aD0iODAlIgptYXAKYGBgCgo8YnI+CgojIyMgVGVzdCBUYWJsZXMKCiMgQnkgaGFuZAoKfCBQbGFudCB8IFRlbXAuIHwgR3Jvd3RoIHwKfDotLS0tLS18Oi0tLS0tOnwtLS0tLS0tOnwKfCBBICAgICB8IDIwICAgIHwgMC42NSAgIHwKfCBCICAgICB8IDIwICAgIHwgMC45NSAgIHwKfCBDICAgICB8IDIwICAgIHwgMC4xNSAgIHwKCiMgV2l0aCBrYWJsZQoKYGBge3IgIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CgojIElmIHlvdSB3YW50IGEgYml0IG1vcmUgY29udHJvbCBvdmVyIHRoZSBjb250ZW50IG9mIHlvdXIgdGFibGUgeW91IGNhbiB1c2UgcGFuZGVyKCkgaW4gdGhlIHBhbmRlciBwYWNrYWdlCgp0IDwtIGFzLmRhdGEuZnJhbWUodGFibGUoc3BwLnB0cyRkYXRhYmFzZSkpCmNvbG5hbWVzKHQpIDwtIGMoIkRhdGFiYXNlIiwiTnVtYmVyX29mX3JlY29yZHMiKQoKI29jQ291bnQgPC0gbnJvdyhzcHAucHRzKQojaWYobGVuZ3RoKFNsKT4xKXsKIyAgZm9yKGkgaW4gMjpsZW5ndGgoU2wpKXsKI28gPC0gR2FwQW5hbHlzaXM6Ok9jY3VycmVuY2VDb3VudHMoc3BlY2llcyA9IFNsW2ldLE9jY3VycmVuY2VfZGF0YSA9IE9kKQojbyA8LSByb3VuZF9kZihvLCA0KQojb2NDb3VudCA8LSByYmluZChvY0NvdW50LCBvKQojICB9CiN9CiNuYW0xIDwtIGNvbG5hbWVzKG9jQ291bnQpCiNjb2xuYW1lcyhvY0NvdW50KSA8LSBjKCJzcGVjaWVzIiwgbmFtMVtjKDI6bGVuZ3RoKG5hbTEpKV0pCnQxIDwtIGtuaXRyOjprYWJsZSh4ID0gdCkKa2FibGVFeHRyYTo6a2FibGVfc3R5bGluZyhrYWJsZV9pbnB1dCA9IHQxLCBib290c3RyYXBfb3B0aW9ucyA9ICJzdHJpcGVkIiwgZnVsbF93aWR0aCA9IEYpCmBgYAoKCioqQm9sZCoqCgoqSXRhbGljKgoKIyBIZWFkZXIgMQoKIyMgSGVhZGVyIDIKCiogVW5vcmRlcmVkIGxpc3QgaXRlbQoKMS4gT3JkZXJlZCBsaXN0IGl0ZW0KCltMaW5rXShodHRwczovL3d3dy5nb29nbGUuY29tKQoKPGJyPgo8YnI+Cjxicj4K